package com.chatplus.application.service.account;

import com.baomidou.mybatisplus.extension.service.IService;
import com.chatplus.application.domain.entity.account.UserProductLogEntity;

import java.util.List;

/**
 * 用户套餐记录业务逻辑接口
 *
 * <p>Table: t_user_product_log - 用户套餐记录</p>
 *
 * @author developer
 * @see UserProductLogEntity
 */
public interface UserProductLogService extends IService<UserProductLogEntity> {

    /**
     * 添加用户套餐记录
     *
     * @param userId    用户id
     * @param productId 套餐id
     * @param orderId   订单id
     */
    void addProductToUser(Long userId, Long productId, Long orderId);

    /**
     * 后台动态给用户添加次数
     *
     * @param userId       用户id
     * @param addChatCalls 新增的会话次数
     * @param addImgCalls  新增的绘图次数
     */
    void adminAddProductToUser(Long userId, Integer addChatCalls, Integer addImgCalls);

    /**
     * 给VIP用户增加每日使用额度
     *
     * @param userId 用户id
     */
    void resetSubscribeToUserByDaily(Long userId);

    /**
     * 获取有效期内的套餐记录
     *
     * @param userId 用户id
     * @return 套餐记录
     */
    List<UserProductLogEntity> getExpirationCardList(Long userId);

    /**
     * 获取用户可用会话余额
     *
     * @param userId 用户id
     * @return 余额
     */
    int getUserChatCalls(Long userId);

    /**
     * 获取用户可用绘画余额
     *
     * @param userId 用户id
     * @return 余额
     */
    int getUserImgCalls(Long userId);


    /**
     * 会话套餐扣减
     *
     * @param userId      用户id
     * @param modelWeight 模型权重
     */
    void reduceChatCalls(Long userId, Integer modelWeight);

    /**
     * 绘画套餐扣减
     *
     * @param userId 用户id
     * @param modelWeight 绘画模型权重
     */
    void reduceImgCalls(Long userId,Integer modelWeight);
}
